﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Reflection;
using KPWeb.Class;
using KPWeb.Slowniki;

namespace KPWeb.Data
{

    public class Model : KPPage
    {
        private static short typAnkietySondazuOd = 0;
        private static short typAnkietySondazuDo = 0;
        private static bool sArchiwum;

   
        private static void ustawZakresAnkietySondazu(short rodzajAnkietySondazu)
        {

            if (rodzajAnkietySondazu >= 1000)
            {
                rodzajAnkietySondazu -= 1000;
                sArchiwum = true;
            }
            else sArchiwum = false;

            switch (rodzajAnkietySondazu)
            {
                case 0://jednostka imienne
                    typAnkietySondazuOd = 1;
                    typAnkietySondazuDo = 10;
                    break;
                case 5://jednostka anonimowe
                    typAnkietySondazuOd = 51;
                    typAnkietySondazuDo = 60;
                    break;
                case 1://firma imienne
                    typAnkietySondazuOd = 11;
                    typAnkietySondazuDo = 20;
                    break;
                case 6://firma  anonimowe
                    typAnkietySondazuOd = 61;
                    typAnkietySondazuDo = 70;
                    break;
                case 10://wybory jednostka anonimowe
                    typAnkietySondazuOd = 101;
                    typAnkietySondazuDo = 200;
                    break;
                case 11://wybory firma anonimowe
                    typAnkietySondazuOd = 201;
                    typAnkietySondazuDo = 300;
                    break;
                //case 12://wybory jednostka anonimowe co najwyżej WJC1_TP
                //   typAnkietySondazuOd = 121;
                //   typAnkietySondazuDo = 130;
                //   break;
                //case 13://wybory firma anonimowe co najwyżej WFC1_TP
                //   typAnkietySondazuOd = 131;
                //   typAnkietySondazuDo = 140;
                //   break;
                //case 14://wybory jednostka anonimowe dokładnie WJR1_PP
                //   typAnkietySondazuOd = 141;
                //   typAnkietySondazuDo = 150;
                //   break;
                //case 15://wybory firma anonimowe dokładnie  WFR1_PP
                //   typAnkietySondazuOd = 151;
                //   typAnkietySondazuDo = 160;
                //   break;
                //case 16://wybory jednostka anonimowe co najwyżej WJC1_PP
                //   typAnkietySondazuOd = 161;
                //   typAnkietySondazuDo = 170;
                //   break;
                //case 17://wybory firma anonimowe co najwyżej WFC1_PP
                //   typAnkietySondazuOd = 171;
                //   typAnkietySondazuDo = 180;
                //   break;

            }


        }



        static public vKP_OdpowiedziPytaniaWiadomosci[] NewsGetCount(int count, int jednostkaGlownaID, int firmaID) //jednostkaGlownaID=0 wtedy Koordynator, -1 pytania i odpowiedzi
        {

            using (DBContainer db = new DBContainer())
            {
                if (jednostkaGlownaID == -1)
                    return db.vKP_OdpowiedziPytaniaWiadomosci.Where(a => (a.JednostkaGlownaID == -1 || a.JednostkaGlownaID == -2) && a.FirmaID == firmaID).
                                      OrderByDescending(a => a.ID).Take(count).ToArray();
                else
                    return db.vKP_OdpowiedziPytaniaWiadomosci.Where(a => a.JednostkaGlownaID == jednostkaGlownaID && a.FirmaID == firmaID).
                    OrderByDescending(a => a.ID).Take(count).ToArray();
            }

        }

        static public vKP_OdpowiedziPytaniaWiadomosci[] NewsGetAll(int jednostkaGlownaID, int firmaID)
        {

          using (DBContainer db = new DBContainer())
          {
              if (jednostkaGlownaID == -2)
                  return db.vKP_OdpowiedziPytaniaWiadomosci.Where(a => a.JednostkaGlownaID == -1  && a.FirmaID == firmaID).
                                    OrderByDescending(a => a.ID).ToArray();
              else
                if (jednostkaGlownaID == -1)
                    return db.vKP_OdpowiedziPytaniaWiadomosci.Where(a => (a.JednostkaGlownaID == -1 || a.JednostkaGlownaID == -2) && a.FirmaID == firmaID).
                    OrderByDescending(a => a.ID).ToArray();
                else
                    return db.vKP_OdpowiedziPytaniaWiadomosci.Where(a => a.JednostkaGlownaID == jednostkaGlownaID && a.FirmaID == firmaID).
                    OrderByDescending(a => a.ID).ToArray();
            }

        }

        public static vKP_JednostkiFirmy GetJednostkaFirma(int jednostkaID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_JednostkiFirmy.Where(a => a.JednostkaID == jednostkaID).Single());
            }
        }

        public IEnumerable<vKP_OsobyListaObecnosci> GetListaObecnosci(string jednostkaKod)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_OsobyListaObecnosci.Where(a => a.JednostkaKod == jednostkaKod).OrderBy(a => a.NazwiskoImie).ToArray());
            }
        }
        public IEnumerable<vKP_OsobyListaObecnosci> GetListaObecnosci(int jednostkaID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_OsobyListaObecnosci.Where(a => a.JednostkaID == jednostkaID).OrderBy(a => a.NazwiskoImie).ToArray());
            }
        }
        //public static IEnumerable<vKP_OsobyListaObecnosci> GetListaObecnosciX(int jednostkaID)
        //{
        //    using (DBContainer db = new DBContainer())
        //    {

        //        return (db.vKP_OsobyListaObecnosci.Where(a => a.JednostkaID == jednostkaID).OrderBy(a => a.NazwiskoImie).ToArray());
        //    }
        //}
        public static IEnumerable<vKP_JednostkiGrupy> GetGrupyDlaFirmy(int FirmaID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_JednostkiGrupy.Where(a => a.FirmaID == FirmaID && a.GrupaKod != Stale.uprZarzad).OrderBy(a => a.GrupaKod).ToArray());
            }
        }
        public static IEnumerable<vKP_JednostkiGrupy> GetGrupyDlaFirmyPlusZarzad(int FirmaID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_JednostkiGrupy.Where(a => a.FirmaID == FirmaID ).OrderBy(a => a.GrupaKod).ToArray());
            }
        }

        public static int GetListaObecnosciMaxStrona(int JednostkaID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_OsobyListaObecnosci.Where(a => a.JednostkaID == JednostkaID).Max(a => a.MaxNumerStrony));
            }
        }
        public static int GetJednostkaGlownaDlaJednostki(int jednostkaID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_JednostkiFirmy.Where(a => a.JednostkaID == jednostkaID).Single().JednostkaGlownaID);
            }
        }
        public IEnumerable<vKP_OsobyListaObecnosci> GetListaObecnosci(int JednostkaID, int GrupaID)
        {
            using (DBContainer db = new DBContainer())
            {

                //.OrderBy(a => a.NumerStrony).OrderBy(a => a.PozycjaNaStronie).OrderBy(a => a.NazwiskoImie)
                return (db.vKP_OsobyListaObecnosci.Where(a => a.JednostkaID == JednostkaID
                      && a.GrupaID == GrupaID).ToArray());
            }
        }

        public static IEnumerable<KP_PlanyUrlopow> GetPlanowaneUrlopy(int OsobaID, short Year)
        {
            using (DBContainer db = new DBContainer())
            {

                //.OrderBy(a => a.NumerStrony).OrderBy(a => a.PozycjaNaStronie).OrderBy(a => a.NazwiskoImie)
                return (db.KP_PlanyUrlopow.Where(a => a.OsobaID == OsobaID && a.Year == Year).ToArray());
            }
        }

        public static IEnumerable<KP_PlanyUrlopow> GetPlanowaneUrlopy(int OsobaID, int Year, int month)
        {
            using (DBContainer db = new DBContainer())
            {

                //.OrderBy(a => a.NumerStrony).OrderBy(a => a.PozycjaNaStronie).OrderBy(a => a.NazwiskoImie)
                return (db.KP_PlanyUrlopow.Where(a => a.OsobaID == OsobaID && a.Year == Year && a.Date.Month == month).ToArray());
            }
        }

        public static Boolean JestOsobaNaListaObecnosci(int OsobaID)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.KP_OsobyLista.Where(a => a.OsobaID == OsobaID).Count() != 0;
            }
        }

        public static Boolean JestKomunikat(DateTime dt, int jednostkaGlownaID)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.Wiadomosci.Where(a => a.DateWhen == dt && a.JednostkaGlownaID == jednostkaGlownaID && a.active=="t").Count() != 0;
            }
        }


        public static void InsertUpdateOsobaLista(int OsobaID, int NumerStrony, int PozycjaNaStronie)
        {
            using (DBContainer db = new DBContainer())
            {

                if (!JestOsobaNaListaObecnosci(OsobaID))
                {
                    KP_OsobyLista e = new KP_OsobyLista();
                    e.OsobaID = OsobaID;
                    e.NumerStrony = NumerStrony;
                    e.PozycjaNaStronie = PozycjaNaStronie;
                    e.active = "t";
                    db.KP_OsobyLista.AddObject(e);
                    db.SaveChanges();
                }
                else
                {
                    var wiz = db.KP_OsobyLista.Where(a => a.OsobaID == OsobaID).Single();
                    wiz.NumerStrony = NumerStrony;
                    wiz.PozycjaNaStronie = PozycjaNaStronie;
                    wiz.active = "t";
                    db.SaveChanges();
                }

            }
        }




        public static int InsertUpdateKomunikat(DateTime dt, string komunikat, int osobaID, int jednostkaID,int firmaID)
        // jednostkę podajemy główną lub O gdy dotyczy koordynatora
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                   int jednostkaGlownaID;
                   if(jednostkaID==0) jednostkaGlownaID =0;
                   else
                      jednostkaGlownaID = Model.GetJednostkaGlownaDlaJednostki(jednostkaID);
                    if (!JestKomunikat(dt, jednostkaGlownaID))
                    {
                        Wiadomosci e = new Wiadomosci();
                        e.DateWhen = dt;
                        e.HTMLMessage = komunikat;
                        e.OsobaID = osobaID;
                        e.JednostkaGlownaID = jednostkaGlownaID;
                        e.FirmaID = firmaID;
                        e.PytanieID=0;
                        e.active = "t";
                        
                        db.Wiadomosci.AddObject(e);
                        db.SaveChanges();
                    }
                    else
                    {
                        var wiz = db.Wiadomosci.Where(a => a.DateWhen == dt && a.JednostkaGlownaID == jednostkaGlownaID && a.active=="t" ).Single();
                        wiz.HTMLMessage = komunikat;
                        wiz.OsobaID = osobaID;
                        db.SaveChanges();
                    }
                    return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }

            }
        }

        //public static int KasujKomunikat(DateTime dt, int osobaID, int jednostkaID, int firmaID)
        //// jednostkę podajemy główną lub O gdy dotyczy koordynatora
        //{
        //    using (DBContainer db = new DBContainer())
        //    {
        //        try
        //        {
        //            int jednostkaGlownaID;
        //            if (jednostkaID == 0) jednostkaGlownaID = 0;
        //            else
        //                jednostkaGlownaID = Model.GetJednostkaGlownaDlaJednostki(jednostkaID);
        //          var wiz = db.Wiadomosci.Where(a => a.DateWhen == dt && a.JednostkaGlownaID == jednostkaGlownaID && a.active == "t").Single();
        //          wiz.OsobaID = osobaID;
        //          wiz.active = "f";
        //          db.SaveChanges();
               
        //         return 0;
        //        }
        //        catch (Exception e)
        //        {
        //            return 1;
        //        }

        //    }
        //}


        public static int InsertUpdatePytaniaOdpowiedzi(DateTime dt, string komunikat, int osobaID,int typ, int firmaID, int pytanieID)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                   
                     
                        Wiadomosci e = new Wiadomosci();
                        e.DateWhen = dt;
                        e.HTMLMessage = komunikat;
                        e.OsobaID = osobaID;
                        e.JednostkaGlownaID = typ;
                        e.FirmaID = firmaID;
                        e.PytanieID = pytanieID;
                        e.active = "t";

                        db.Wiadomosci.AddObject(e);
                        db.SaveChanges();
                   
                       return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }

            }
        }

        public static int KasujKomunikatPytaniaOdpowiedzi(int ID, int osobaID)
        // jednostkę podajemy główną lub O gdy dotyczy koordynatora
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    var wiz = db.Wiadomosci.Where(a => a.ID==ID).Single();
                    wiz.OsobaID = osobaID;
                    wiz.active = "f";
                    db.SaveChanges();

                    return 0;
                }
                catch (Exception e)
                {
                    return -1;
                }

            }
        }

        public static int InsertUserLoginASP(int OsobaID, string login, string IP, string uprawnienia)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    UserLoginASP e = new UserLoginASP();
                    e.OsobaID = OsobaID;
                    e.Login = login;
                    e.TimeStart = DateTime.Now;
                    e.IP = IP;
                    e.Uprawnienia = uprawnienia;

                    db.UserLoginASP.AddObject(e);
                    db.SaveChanges();

                    return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }

            }
        }


        //delete
        //public static void DeleteEmployee()
        //{
        //    using (DBContainer db = new DBContainer())
        //    {
        //        int id = 33;


        //        db.EMPLOYEE_.DeleteObject(db.EMPLOYEE_.Where(a => a.EMPLOYEE_ID == id).Single());
        //        db.SaveChanges();
        //    }
        //}

        public static DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
        {
            DataTable dtReturn = new DataTable();


            // column names
            PropertyInfo[] oProps = null;


            if (varlist == null) return dtReturn;


            foreach (T rec in varlist)
            {
                // Use reflection to get property names, to create table, Only first time, others will follow
                if (oProps == null)
                {
                    oProps = ((Type)rec.GetType()).GetProperties();
                    foreach (PropertyInfo pi in oProps)
                    {
                        Type colType = pi.PropertyType;


                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                        {
                            colType = colType.GetGenericArguments()[0];
                        }


                        dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
                    }
                }


                DataRow dr = dtReturn.NewRow();


                foreach (PropertyInfo pi in oProps)
                {
                    dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue
                    (rec, null);
                }


                dtReturn.Rows.Add(dr);
            }

            return dtReturn;
        }

        public static IEnumerable<ImagesSet> GetImages()
        {
            return null;
        }
        public static int InsertUpdateLunch(string menu, int jednostkaID, int osobaID)

             //1 błąd zapisu
        {
            using (DBContainer db = new DBContainer())
            {
                int jednostkaGlownaID = Model.GetJednostkaGlownaDlaJednostki(jednostkaID);
                try
                {

                    var wiz = db.KP_TypLunch.Where(a => a.JednostkaGlownaId == jednostkaGlownaID && a.active == "t").ToArray();
                    foreach (KP_TypLunch itemp in wiz)
                    {
                        itemp.active = "f";

                        db.SaveChanges();
                    }

                    //  List<string> lMenu = new List<string>();
                    string[] lMenu = menu.Split('#');
                    if (lMenu.Count() == 1 && lMenu[0].Trim() == "") return 0;
                    foreach (string s in lMenu)
                    {
                        if (s.Trim() != "")
                        {
                            KP_TypLunch n = new KP_TypLunch();
                            n.NazwaLunch = s;
                            n.OsobaID = osobaID;
                            n.active = "t";
                            n.JednostkaGlownaId = jednostkaGlownaID;
                            db.KP_TypLunch.AddObject(n);
                            db.SaveChanges();
                        }
                    }

                    return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }


            }
        }

        public static int InsertNowaAnkietaSondazTransact(int osobaID, int jednostkaID, int grupaID, string ankietasondazName, DateTime dataOd, DateTime dataDo,
           byte typAnkietySondazu, string uwagi, string pytania)
        //    >0 ID utworzonego dokumentu OK
        //-1 błąd zapisu
        //-2 błędny zapis pytań
        {
            System.Data.Common.DbTransaction trans = null;
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    int ankietaSondazID = 0;
                    db.Connection.Open();
                    trans = db.Connection.BeginTransaction();

                    int jednostkaGlownaID = Model.GetJednostkaGlownaDlaJednostki(jednostkaID);
                    KP_AnkietaSondaz e = new KP_AnkietaSondaz();
                    e.JednostkaGlownaID = jednostkaGlownaID;
                    e.GrupaID = grupaID;
                    e.AnkietaSondazName = ankietasondazName;
                    e.Uwagi = uwagi;
                    e.OsobaID = osobaID;

                    e.DataOd = dataOd;
                    e.DataDo = dataDo;
                    e.TypAnkietySondazuID = typAnkietySondazu;

                    e.active = "t";

                    db.KP_AnkietaSondaz.AddObject(e);
                    db.SaveChanges();
                    //  ankietaSondazID=(e.AnkietaSondazID==null?0:e.AnkietaSondazID);
                    ankietaSondazID = e.AnkietaSondazID;
                    if (ankietaSondazID == 0)
                    {
                        if (trans != null) trans.Rollback();
                        return -1;
                    }

                    string[] lPytania = pytania.Split('#');
                    if (lPytania.Count() == 1 && lPytania[0].Trim() == "") return -2;
                    foreach (string s in lPytania)
                    {
                        if (s.Trim() != "")
                        {
                            KP_AnkietaSondazPytania n = new KP_AnkietaSondazPytania();
                            n.AnkietaSondazID = ankietaSondazID;
                            n.Pytanie = s.Trim();
                            n.active = "t";
                            n.OsobaID = osobaID;
                            db.KP_AnkietaSondazPytania.AddObject(n);
                            db.SaveChanges();
                        }
                    }

                    trans.Commit();
                    return ankietaSondazID;
                }
                catch (Exception e)
                {
                    if (trans != null)
                        trans.Rollback();
                    return -1;
                }
                finally
                {
                    if (db.Connection.State == ConnectionState.Open)
                        db.Connection.Close();
                }


            }

        }
        public static IEnumerable<vLex_TypAnkietySondazu> GetTypyAnkietySondazuDlaJednostki()
        {
            using (DBContainer db = new DBContainer())
            {
                return (db.vLex_TypAnkietySondazu.Where(a => a.TypAnkietySondazuKod.Substring(2, 1) == Stale.uprJednostka || a.TypAnkietySondazuKod.Substring(1, 1) == "J")
                                                         .OrderBy(a => a.TypAnkietySondazuNazwa).ToArray());


            }
        }
        public static IEnumerable<vLex_TypAnkietySondazu> GetTypyAnkietySondazuDlaFirmy()
        {
            using (DBContainer db = new DBContainer())
            {
                return (db.vLex_TypAnkietySondazu.Where(a => a.TypAnkietySondazuKod.Substring(2, 1) == "F"
                             || a.TypAnkietySondazuKod.Substring(1, 1) == "F")
                                                   .OrderBy(a => a.TypAnkietySondazuNazwa).ToArray());
            }
        }
        public static List<byte?> GetRodzajeAnkietySondazu()
        {
            using (DBContainer db = new DBContainer())
            {
                var rList = db.vLex_TypAnkietySondazu.Select(a => a.RodzajAnkietySondazu).Distinct().ToList();

                return (rList);
                //  return (db.vLex_TypAnkietySondazu.Select(a=>a.RodzajAnkietySondazu).Distinct().ToList());
            }
        }
        public static IEnumerable<vLex_TypAnkietySondazu> GetTypyAnkietySondazu(short rodzajAnkietySondazu)
        {
            ustawZakresAnkietySondazu(rodzajAnkietySondazu);
            using (DBContainer db = new DBContainer())
            {

                return (db.vLex_TypAnkietySondazu.
                    Where(a => a.TypAnkietySondazuID >= typAnkietySondazuOd && a.TypAnkietySondazuID <= typAnkietySondazuDo)
                    .OrderBy(a => a.TypAnkietySondazuNazwa).ToArray());
            }
        }


        public static IEnumerable<vKP_AnkietaSondaz> PobierzAnkietySondaze(int typAnkietySondazuID, short rodzajAnkietySondazu )
        {
            DateTime dt1 = DateTime.Now.Date;
            ustawZakresAnkietySondazu(rodzajAnkietySondazu);


            using (DBContainer db = new DBContainer())
            {
                int gr = TypyUprawnien.GetGrupaDlaOsobaID(int.Parse(Current.OsobaID), Current.Uprawnienia);
                if (typAnkietySondazuID == -1) return null;

                if (Current.Uprawnienia == Stale.uprMoje || Current.Uprawnienia == Stale.uprKierownik || Current.Uprawnienia == Stale.uprJednostka)
                {
                    int jednostkaGlownaID = Model.GetJednostkaGlownaDlaJednostki(int.Parse(Current.JednostkaID));
                    if (!sArchiwum)
                    {
                        if (typAnkietySondazuID != 0)
                            return (db.vKP_AnkietaSondaz.Where(a => a.TypAnkietySondazuID == typAnkietySondazuID
                                && a.JednostkaGlownaID == jednostkaGlownaID && (a.GrupaID == gr || a.GrupaID == -1 )
                                // && a.TypAnkietySondazuID >= typAnkietySondazuOd && a.TypAnkietySondazuID <= typAnkietySondazuDo
                                && a.DataDo >= dt1 && a.DataOd <= dt1).OrderByDescending(a => a.AnkietaSondazID).ToArray());
                        else
                            return (db.vKP_AnkietaSondaz.Where(a => a.JednostkaGlownaID == jednostkaGlownaID && (a.GrupaID == gr || a.GrupaID == -1 )
                                && a.TypAnkietySondazuID >= typAnkietySondazuOd && a.TypAnkietySondazuID <= typAnkietySondazuDo
                                 && a.DataDo >= dt1 && a.DataOd <= dt1).OrderByDescending(a => a.AnkietaSondazID).ToArray());
                    }
                    else
                    {
                        if (typAnkietySondazuID != 0)
                            return (db.vKP_AnkietaSondaz.Where(a => a.TypAnkietySondazuID == typAnkietySondazuID
                                && a.JednostkaGlownaID == jednostkaGlownaID && (a.GrupaID == gr || a.GrupaID == -1 )
                                //   && a.TypAnkietySondazuID >= typAnkietySondazuOd && a.TypAnkietySondazuID <= typAnkietySondazuDo
                                && (a.DataDo < dt1 || a.DataOd > dt1)).OrderByDescending(a => a.AnkietaSondazID).ToArray());
                        else
                            return (db.vKP_AnkietaSondaz.Where(a => a.JednostkaGlownaID == jednostkaGlownaID && (a.GrupaID == gr || a.GrupaID == -1 )
                                && a.TypAnkietySondazuID >= typAnkietySondazuOd && a.TypAnkietySondazuID <= typAnkietySondazuDo
                                && (a.DataDo < dt1 || a.DataOd > dt1)).OrderByDescending(a => a.AnkietaSondazID).ToArray());
                    }
                }
                else
                    if (Current.Uprawnienia == Stale.uprGlosowania || Current.Uprawnienia == Stale.uprKoordynator) 
                {

                    if (!sArchiwum)
                    {
                        if (typAnkietySondazuID != 0)
                            return (db.vKP_AnkietaSondaz.Where(a => a.TypAnkietySondazuID == typAnkietySondazuID
                               && a.DataDo >= dt1 && a.DataOd <= dt1).OrderByDescending(a => a.AnkietaSondazID).ToArray());
                        else
                            return (db.vKP_AnkietaSondaz.Where(a =>  a.TypAnkietySondazuID >= typAnkietySondazuOd && a.TypAnkietySondazuID <= typAnkietySondazuDo
                                 && a.DataDo >= dt1 && a.DataOd <= dt1).OrderByDescending(a => a.AnkietaSondazID).ToArray());
                    }
                    else
                    {
                        if (typAnkietySondazuID != 0)
                            return (db.vKP_AnkietaSondaz.Where(a => a.TypAnkietySondazuID == typAnkietySondazuID
                                  && (a.DataDo < dt1 || a.DataOd > dt1)).OrderByDescending(a => a.AnkietaSondazID).ToArray());
                        else
                            return (db.vKP_AnkietaSondaz.Where(a =>  a.TypAnkietySondazuID >= typAnkietySondazuOd && a.TypAnkietySondazuID <= typAnkietySondazuDo
                                && (a.DataDo < dt1 || a.DataOd > dt1)).OrderByDescending(a => a.AnkietaSondazID).ToArray());
                    }
                }
                else return null;
            }
        }
        public static IEnumerable<vKP_AnkietaSondaz> PobierzAnkietySondazeAktualne(short rodzajAnkietySondazu)
        {
            DateTime dt1 = DateTime.Now.Date;
            ustawZakresAnkietySondazu(rodzajAnkietySondazu);

            using (DBContainer db = new DBContainer())
            {
                int gr = TypyUprawnien.GetGrupaDlaOsobaID(int.Parse(Current.OsobaID), Current.Uprawnienia);
                int jednostkaGlownaID = Model.GetJednostkaGlownaDlaJednostki(int.Parse(Current.JednostkaID));
                return (db.vKP_AnkietaSondaz.Where(a => a.JednostkaGlownaID == jednostkaGlownaID && (a.GrupaID == gr || a.GrupaID == -1
                                && Current.Uprawnienia != Stale.uprZarzad)
                             && a.TypAnkietySondazuID >= typAnkietySondazuOd && a.TypAnkietySondazuID <= typAnkietySondazuDo
                              && a.DataDo >= dt1 && a.DataOd <= dt1).OrderByDescending(a => a.AnkietaSondazID).ToArray());
            }
        }
        public static IEnumerable<vKP_AnkietaSondazPytania> GetAnkietaSondazPytania(int ankietaSondazID, int osobaID)
        {
            using (DBContainer db = new DBContainer())
            {
                return (db.vKP_AnkietaSondazPytania.Where(a => a.AnkietaSondazID == ankietaSondazID && a.OsobaID == osobaID)
                     .OrderBy(a => a.AnkietaSondazPytaniaID).ToArray());
            }
        }
        public static IEnumerable<vKP_AnkietaSondazPytaniaBrakOdpowiedzi> GetAnkietaSondazPytaniaBrakOdpowiedzi(int ankietaSondazID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_AnkietaSondazPytaniaBrakOdpowiedzi.Where(a => a.AnkietaSondazID == ankietaSondazID)
                         .OrderBy(a => a.AnkietaSondazPytaniaID).ToArray());
            }
        }
        public static IEnumerable<vKP_AnkietaSondazWyniki> GetAnkietaSondazWyniki(int ankietaSondazID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_AnkietaSondazWyniki.Where(a => a.AnkietaSondazID == ankietaSondazID).ToArray());
            }
        }
        public static IEnumerable<vKP_AnkietaSondazOdpowiedzi> GetAnkietaSondazOdpowiedzi(int ankietaSondazID, int osobaID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_AnkietaSondazOdpowiedzi.Where(a => a.AnkietaID == ankietaSondazID && a.OsobaID == osobaID).ToArray());
            }
        }
        public static int InsertUpdateAnkietaOdpowiedz(string[] pytania, string[] odpowiedzi, int osobaID, int ankietaID)

               //1 błąd zapisu
        {
            using (DBContainer db = new DBContainer())
            {

                try
                {

                    var wiz = db.KP_AnkietaSondazOdpowiedzi.Where(a => a.OsobaID == osobaID && a.AnkietaID == ankietaID && a.active == "t").ToArray();

                    foreach (KP_AnkietaSondazOdpowiedzi itemp in wiz)
                    {
                        itemp.active = "f";

                        db.SaveChanges();
                    }

                    for (int i = 0; i < odpowiedzi.Length; i++)
                    {
                        KP_AnkietaSondazOdpowiedzi n = new KP_AnkietaSondazOdpowiedzi();
                        n.AnkietaSondazPytaniaID = int.Parse(pytania[i]);
                        n.OdpowiedzID = byte.Parse(odpowiedzi[i]);
                        n.OsobaID = osobaID;
                        n.AnkietaID = ankietaID;
                        n.active = "t";
                        n.DataOdpowiedzi = DateTime.Now;
                        db.KP_AnkietaSondazOdpowiedzi.AddObject(n);
                        db.SaveChanges();
                    }

                    return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }


            }
        }
        public static bool GetAnkietaSondazCzyGlosowal(int osobaID, int ankietaSondazID, string uprawnienia)
        {

            using (DBContainer db = new DBContainer())
            {
                int gr = TypyUprawnien.GetGrupaDlaOsobaID(osobaID, uprawnienia);

                return (db.vKP_AnkietaSondazOdpowiedzi.Where(a => a.AnkietaID == ankietaSondazID &&
                        a.OsobaID == osobaID && (a.GrupaID == gr || a.GrupaID == -1 && uprawnienia != Stale.uprZarzad)).Count() > 0);
            }
        }

    }
}